﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace GameMario.Personagens
{
    class Mario : Objetos.Sprite
    {
        animacao parado;
        animacao direita;
        animacao esquerda;
        animacao pulando;

        SoundEffect pulo;

        Vector2 velocidade;
        float gravidade;

        bool caindo = true;

        /// <summary>
        /// animacao ativa
        /// </summary>
        public animacao animacao_atual;

        
        public Mario(Texture2D textura, Vector2 posicao, Vector2 velocidade, SoundEffect pulo)
            : base(textura)
        {
            this.pulo = pulo;
            gravidade = 400.0f;
            //this.textura = textura;
            this.posicao = new Vector2(380,300);
            this.velocidade = new Vector2(5, 5);
            
            destino = new Rectangle(0, 0, parado.quadro_X, parado.quadro_Y);

            animacao_atual = parado;

        }
        public override void Update(GameTime gameTime)
        { 
        }
        public void Update(GameTime gameTime, KeyboardState teclado, KeyboardState teclado_anterior)
        {

            //float tempo = (float)(gameTime.ElapsedGameTime.TotalMilliseconds / 1000.0f);


            if (caindo == true)
            {
                float tempo = (float)(gameTime.ElapsedGameTime.TotalMilliseconds / 1000.0f);
                // Atualiza a posição Y da bola
                posicao += velocidade * tempo;
                // Se não atingiu a velocidade máxima, sua gravidade (h = vo * t + (g * t*t)/2)
                posicao.Y += (velocidade.Y * tempo) + (gravidade * (float)Math.Pow(tempo, 2)) / 2.0f;
                // Atualiza a velocidade Y do objeto ( v = vo + g * t )
                velocidade.Y += gravidade * tempo;
                // A velocidade máxima é 300.0f
                velocidade.Y = (velocidade.Y > 300.0f) ? 300.0f : velocidade.Y;
            }
            //PARADO
            if (teclado.IsKeyUp(Keys.Right) && teclado.IsKeyUp(Keys.Left) && teclado.IsKeyUp(Keys.Up))
            {
                parado = new animacao();
                parado.qtd_quadros = 3;
                parado.quadros_seg = 3;
                parado.Y = 384;
                parado.quadro_Y = 64;
                parado.quadro_X = 47;
                parado.nome = "Mario";
                animacao_atual = parado;
                caindo = true;
            }
            //DIREITA
            if (teclado.IsKeyDown(Keys.Right))
            {
                direita = new animacao();
                direita.qtd_quadros = 3;
                direita.quadros_seg = 3;
                direita.Y = 320;
                direita.quadro_Y = 64;
                direita.quadro_X = 47;
                direita.nome = "Mario";
                animacao_atual = direita;
                posicao.X += velocidade.X;
                caindo = true;
            }
            //DIREITA COM PULO
            if (teclado.IsKeyDown(Keys.Right) && teclado.IsKeyDown(Keys.Up))
            {
                direita = new animacao();
                direita.qtd_quadros = 3;
                direita.quadros_seg = 3;
                direita.Y = 64;
                direita.quadro_Y = 64;
                direita.quadro_X = 47;
                direita.nome = "Mario";
                animacao_atual = direita;
                //posicao.X += velocidade.X;
            }
            //ESQUERDA
            if (teclado.IsKeyDown(Keys.Left))
            {
                esquerda = new animacao();
                esquerda.qtd_quadros = 3;
                esquerda.quadros_seg = 3;
                esquerda.Y = 448;
                esquerda.quadro_Y = 64;
                esquerda.quadro_X = 47;
                esquerda.nome = "Mario";
                animacao_atual = esquerda;
                posicao.X -= velocidade.X;
                caindo = true;
            }
            //ESQUERDA COM PULO
            if (teclado.IsKeyDown(Keys.Left) && teclado.IsKeyDown(Keys.Up))
            {
                esquerda = new animacao();
                esquerda.qtd_quadros = 3;
                esquerda.quadros_seg = 3;
                esquerda.Y = 194;
                esquerda.quadro_Y = 64;
                esquerda.quadro_X = 47;
                esquerda.nome = "Mario";
                animacao_atual = esquerda;
                //posicao.X -= velocidade.X;
                caindo = true;
            }
            //PULO
            if (teclado.IsKeyDown(Keys.Up) && !teclado_anterior.IsKeyDown(Keys.Up))
            {
                pulando = new animacao();
                pulando.qtd_quadros = 3;
                pulando.quadros_seg = 3;
                pulando.Y = 128;
                pulando.quadro_Y = 64;
                pulando.quadro_X = 47;
                pulando.nome = "Mario";
                animacao_atual = pulando;
                posicao.X -= velocidade.X;
                pulo.Play();
                //MediaPlayer.IsRepeating = true;
                posicao.Y -= 100;
                caindo = false;
            }
            if (posicao.X > 380)
            {
                posicao.X = 380;
            }
            if (posicao.X < 380)
            {
                posicao.X = 380;
            }
            if (posicao.Y > 500)
            {
                caindo = false;
                posicao.Y = 500;
            }
            
        }
        public void Draw(SpriteBatch spriteBatch, GameTime gameTime)
        {
            base.Draw(gameTime, spriteBatch, animacao_atual);
        }

    }
}
